/***********************************************************************************
 *
 *  这个文件用于投票详情页面的公共混入
 *
 **********************************************************************************/
//todo 这个文件可能 要整改
import {
	apiMySponsoredVoteDetail, tronBalanceOfVotes, tronGetBenefitsVote,
	tronGetReviewInfo,
	tronGetVoteKeyData, apiVotingAnalysisServe,
} from "@/views/uc/manage/js/manage.user.lib";
import { getEffectiveValueForContest2, getEffectiveValueForVote } from "@/views/manage/js/manage.func";
import { DATAMAP_VOTE } from "@/views/manage/js/manage.lib";
import { dev, hex2Num } from "@/libs/tron.lib";
import {
	msgInterface,
	precisionToNum,
	smartContractBroadcastCallback,
	smartContractConfirmCallback,
} from "@/libs/site.utils";
import { apiRequestGameTron } from "@/views/contestHall/contest.func";


export const mixinsVoteDetail = {
	data (){
		return {
			///////////////////////////////简单值/////////////////////////////////////
			//todo 这里要改成数据库的id，目前url中的是投票合约中的id
			//todo 先改为voteId,再增加纯数据库的id
			id                : 0, //合约中的投票自增id
			playId            : "",// 游戏id
			loading           : false,
			submiting         : false,//是否提交中
			visibleResultWrite: false,//显示控制：结果填写
			timestampNow      : 0,//当前时间戳
			loadingVote       : false,//单独使用的loading,表示投票数据的加载解析状态
			loadingContest    : false,//单独使用的loading，表示赛事数据加载解析状态

			numberVotesToBeReceived:0,//待领取到的质押票数，一键领取就空了，变量
			
			///////////////////////////////复杂值/////////////////////////////////////
			//投票数据对象（从后台读取的，不需要初始化太多属性）
			voteObject:{
				status     : null,//投票状态
				proposalId : null,//投票区块id
			},
			//投票实时数据对象，应该从区块链上实时获取，并一对一赋值，这里要初始化属性
			timelyObjectVote:{
				status        : 0,//投票状态
				forVotes      : 0,//总赞成票数
				forVotesMy    : 0,//我的赞成票数
				againstVotes  : 0,//总反对票数
				againstVotesMy: 0,//我的反对票数
			},
			//后台赛事数据+实时数据对象（接口中的赛事数据和投票数据是分开的对象）
			timelyObjectContest:{
				status   : null,//赛事状态
				initMoney: 0,//初始本钱
				curMoney : 0,//当前的钱
			},
			//赛事复审对象
			reviewObjectContest:{
				calldatas:{
					rs:[] //复审投票内容：填写的足球赛事结果
				},
				reviewId: "0",//复审id，0就是没有在复审中,（详细参考合约中复核的数据处理方式）
				reviewState: "0"//复审状态
			},
			
			//投注币种信息
			betCoinData: {
				decimal: 0,
				name    : "",
				symbol  : "",
				address : ""
			},
			
		}
	},
	computed:{},
	created () {
		this.id = this.$route.query.id
		// this.voteObject.proposalId = this.id; //接口的voteObject里面已经有proposalId
		this.timerProposal = setInterval(() => {
			this.dataReadDispatch();
		}, 60*1000)
	},

	methods:{
		//获取我发起的投票详情
		getMySponsoredVoteDetail (cb) {
			let that=this;
			apiMySponsoredVoteDetail({
				sender: this.sender,
				id:this.id
			}, (res) => {
				that.timelyObjectContest = res.timelyObjectContest;
				that.voteObject          = res.voteObject;
				that.playId              = res.voteObject.externalLinkId
				cb()
			})
		},
		//从区块链读取实时投票数据，并解析
		viewProposalInfo(param, manageList) {
			let that = this;
			this.loadingVote    = true //加载中（投票数据）
			//从合约请求实时数据并解析
			tronGetVoteKeyData(param,this.sender).then((rs) => {

				//js解析
				// let {param} = rs
				let _analyzing = getEffectiveValueForVote(rs,Object.keys(DATAMAP_VOTE).length)
				dev && console.log('/////////////////////////////////////////////请求单个投票实时数据解析结果数据:',_analyzing)
				this.timelyObjectVote.status         = _analyzing[0][DATAMAP_VOTE.STATUS.index] // 状态
				this.timelyObjectVote.forVotes       = precisionToNum(_analyzing[0][DATAMAP_VOTE.FAVOUR_COUNT.index]) // 当前总赞成票数
				this.timelyObjectVote.againstVotes   = precisionToNum(_analyzing[0][DATAMAP_VOTE.OPPOSE_COUNT.index]) //当前总反对票
				this.timelyObjectVote.forVotesMy     = precisionToNum(_analyzing[0][DATAMAP_VOTE.FAVOUR_COUNT_MY.index]) //我的赞成票
				this.timelyObjectVote.againstVotesMy = precisionToNum(_analyzing[0][DATAMAP_VOTE.OPPOSE_COUNT_MY.index]) //我的反对票
				this.loadingVote = false //已完成加载

			});
		},
		

		//读取我的票数余额
		getBalanceOfVotes() {
			let that = this;
			//从赛事合约请求实时数据并解析
			tronBalanceOfVotes(this.sender, this.id, this.sender).then((rs) => {
				let lockUpAmount             = hex2Num(rs, this.xg.decimal);
				that.numberVotesToBeReceived = lockUpAmount;
			})
		},
		
		//从区块链请求复核实时数据并解析
		getReviewInfo(param) {
			let that = this;
			tronGetReviewInfo(param).then((rs) => {
				//解析合约返回（目前使用服务器的接口来解析）
				apiRequestGameTron({
					"type": "getReviewInfo",
					'act': 'returnDataAnalyze',
					"param": rs
				}).then(result => {
					let data = result;
					if (data.resultFlag != true) {
						return;
					}
					that.reviewObjectContest = data.data;
				}).catch(err => {
					console.log(err)
				})
			});
		},
		
		// 取回票数和奖励(链上自动判断是否身份，进行对应的领取)
		getBenefits() {
			let that = this;
			let id = this.id;//todo 这里id要改为投票id
			msgInterface('一鍵取回收益、質押票數', 0, 1, '','');
			tronGetBenefitsVote(
				this.sender,
				id,
				smartContractBroadcastCallback('一鍵取回', '收益、質押票數', (status, txid) => {
					this.submiting = false //恢复可提交
					this.visibleResultWrite = false //关闭
					if (status == 1) {
						apiVotingAnalysisServe({}, txid); //通知服务器根据hash爬新数据
						setTimeout(() => {
							that.dataReadDispatch();
						},5000)
						setTimeout(() => {
							that.dataReadDispatch();
						},10000)
					}
				},
				smartContractConfirmCallback('一鍵取回','收益、質押票數，成功')
				)
			);
		},
	}
}
